package com.jxpanda.starter.config.security;

import com.jxpanda.commons.toolkit.RandomKit;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Panda
 */
@Data
@ConfigurationProperties(prefix = AuthenticationProperties.PREFIX)
public class AuthenticationProperties {

    public static final String PREFIX = "auth";

    private static final int DEFAULT_TOKEN_LIVE = 7 * 24 * 60 * 60;

    /**
     * token的声明周期，单位是秒，默认是7天（）
     */
    private int tokenLive = DEFAULT_TOKEN_LIVE;

    /**
     * 签名算法，常用的值是HS256和RS256
     * RS256、RS384、RS512 传递公钥和私钥参数，其他传递key就行了
     * 默认HS256
     */
    private SignatureAlgorithm algorithm = SignatureAlgorithm.HS256;

    /**
     * 通用的key，使用其他算法做签名的时候使用
     * 默认是一个随机的16位字符串
     */
    private String key = RandomKit.nextString(16);

    /**
     * 私钥，使用RSA签名token的时候使用，否则不需要传递
     * 因为默认算法是HS256，所以默认是空值
     */
    private String privateKey;

    /**
     * 公钥，使用RSA签名token的时候使用，否则不需要传递
     * 因为默认算法是HS256，所以默认是空值
     */
    private String publicKey;

    /**
     * 开放接口的相对路径
     * 默认开通 auth/** 和 open/** 两个
     * 除了开放的接口，默认全都是需要授权的
     */
    private List<String> openUrls = new ArrayList<>();

}
